import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;

public class MD5Demo {

    //明文
    String password = "password123456";
    //明文经过MD5加密后存储的密码
    private static String savePassword = "yyjgDvUTdLhB+1wYmyuRyQ==";

    public static void main(String[] args) {

        System.out.println(login("password123456"));
    }

    //登录
    public static boolean login(String password){
        if(savePassword.equals(MD5Encoder(password))){
            //密码正确
            return true;
        }else {
            return false;
        }
    }

    //计算MD5的方法
    private static String MD5Encoder(String password){
        try{
            //1、通过MD5计算摘要
            byte[] bytes1 = MessageDigest.getInstance("MD5").digest(password.getBytes(StandardCharsets.UTF_8));
            //2、把bytes用a-z A-Z 0-9组成的字符串存储，BASE64编码算法。密文存储。
            String base64 = Base64.getEncoder().encodeToString(bytes1);
            //3、返回密文
            return base64;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        //返回null
        return null;
    }

    //分析MD5
    private static void extracted() {
        //明文
        String password = "password123456";
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("MD5");
            //1、通过MD5计算摘要
            byte[] bytes = messageDigest.digest(password.getBytes(StandardCharsets.UTF_8));
            //此时为数组
            System.out.println(Arrays.toString(bytes));
            //用String表示时为乱码
            System.out.println(new String(bytes));
            //2、把bytes用a-z A-Z 0-9组成的字符串存储，BASE64编码算法。密文存储。
            String base64 = Base64.getEncoder().encodeToString(bytes);
            //3、BASE64解码算法
            byte[] bytes1  = Base64.getDecoder().decode(base64);
            System.out.println(base64);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }

}
